package base.exa02_dataTypeAndPrint;

/**
 * 基本类型的存储空间以及取值范围学习
 */
public class Demo3_BaseDataTypeValueRange {

    /**
     * byte占一个字节，也就是8位
     * 其取值范围为：
     * -128~127(-2^7~2^7-1)
     */
    byte aByte = 10;
    /**
     * short占两个字节，也就是16位
     * -2^15~2^15-1
     * -32768~32767
     */
    short aShort = 10;
    /**
     *int占4个字节，32位
     * -2^31~2^31-1
     */
    int anInt = 10;
    /**
     * long占8个字节，64位
     * -2^63~2^63-1
     */
    long aLong = 11L;
    /**
     * float类型占4个字节，32位
     * 取值范围： -3.4028235e+38f~ 3.4028235e+38f
     */
    float aFloat = 11.1f;
    /**
     * double类型占8个字节，64位
     * 取值范围：
     */
    double aDouble = 11.32;
    /**
     * char类型占2个字节，16位
     *
     */
    char aChar = 'f';
    /**
     * boolean 在java虚拟机中没有提供任何boolean值专用的字节码指令，
     * java语言表达式所操作的boolean的值在编译之后都使用Java虚拟机中的int数据类型来代替，所以占4个字节，32位
     * 而boolean数组中又是1个字节，8位
     * 使用int的原因是，对于当下32位的处理器（CPU）来说，一次处理数据是32位
     * （这里不是指的是32/64位系统，而是指CPU硬件层面），具有高效存取的特点。
     */
    boolean aBoolean = false;

    public static void main(String[] args) {
        Demo3_BaseDataTypeValueRange base = new Demo3_BaseDataTypeValueRange();
        //基本类型byte取值范围实验
        base.aByte = (byte) -129;
        System.out.println(base.aByte);
        base.aByte = (byte) 129;
        System.out.println(base.aByte);
        //基本类型short取值范围实验
        base.aShort = -32768;
        System.out.println(base.aShort);
        base.aShort = 32767;
        System.out.println(base.aShort);
        //基本类型float的取值范围
        System.out.println(base.aFloat);
        System.out.println("float 最小值： "+Float.MAX_VALUE*-1);
        System.out.println("float 最大值： "+Float.MAX_VALUE);
        System.out.println("float 正数最小值： "+Float.MIN_VALUE);
        System.out.println("float 负数最大值： "+Float.MIN_VALUE*-1);
        //double的取值范围
        System.out.println("double 最小值："+Double.MAX_VALUE*-1);
        System.out.println("double 最大值："+Double.MAX_VALUE);

    }

}
